package 设计原则.组合优于继承;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
 * 再重写`addAll`方法，确保`addAll`方法一定能调用到`add`方法，也就能够对 `count`进行增加操作。
 *
 * 缺陷：如果未来，`HashSet`新增了一个`addSome`方法进行元素的添加，那就白给了。
 *
 * 重写了`addAll、add`这两个方法，如果`JDK`中其他类的某些方法依赖于`HashMap`中的这两个方法，那么某些方法就会有出错、崩溃等风险。hor lxiaol
 * @date 2021年06月24日 16:12
 */
public class negtive_2 {
    static class MySet extends HashSet{
        private int count = 0;

        public int getCount() {
            return count;
        }

        @Override
        public boolean add(Object o) {
            count++;
            return super.add(o);
        }

        @Override
        public boolean addAll(Collection c) {
            boolean modified = false;
            for (Object e : c) {
                if (add(e)) {
                    modified = true;
                }
            }
            return modified;
        }

    }

    public static void main(String[] args) {
        MySet mySet = new MySet();
        mySet.add("111111");
        mySet.add("22222222222222");
        mySet.add("2333");


        Set<String> hashSet = new HashSet<>();
        hashSet.add("集合+11111");
        hashSet.add("集合+22222222");
        hashSet.add("集合+233333");
        mySet.addAll(hashSet);

        System.out.println(mySet.getCount());
    }
}
